/*
# MIAHX© 框架消息 FastDDS API 的包装类（Nodejs端）

Version: 0.4.10,
Last updated: October 19, 2024

## Contributor(s)
* YAO Naiming <[naiming@iscas.ac.cn](mailto:naiming@iscas.ac.cn)>

## Change log
### v0.4.10
- .19: [更新] 新增用户感知数据发布
- .17: [更新] 新增三维点云模态的自车轨迹数据发布
- .17: [更新] JSON 数据中新增 topic 字段，区分消息主题；发布数据样本的 iid 和 uts
- .16: [更新] 重命名，新增注释
### v0.4.7
- .26: [新增] 初始实现

---
Copyright © 2024-2025 MIAHX Contributors, ISCAS, and ASIC. All Rights Reserved.
Licensed under Apache-2.0.
*/

#pragma once

#include "miahx/export.h"


typedef void DATA_PROVIDER(const char *, void *);


/**
 * @brief 数据流处理器（Nodejs C接口）
 */
class MiahxWrapperNodejs {
public:
    /**
     * @brief 获取单例
     *
     * @return 单例指针，无需析构
     */
    MIAHX_WRAPPER_API
    static MiahxWrapperNodejs *get_instance();

    /**
     * @brief 设置 BeamNG Classical 仿真传感器采样数据的提供器对象
     *
     * @param provider 提供器函数指针
     * @param user_state 用户自定义数据
     * @return StreamHandler 类型对象的指针，无需析构
     */
    MIAHX_WRAPPER_API
    void set_bng_classical_data_provider(DATA_PROVIDER provider, void *user_state);

    /**
     * @brief 设置自车轨迹数据的提供器对象
     *
     * @param provider 提供器函数指针
     * @param user_state 用户自定义数据
     * @return StreamHandler 类型对象的指针，无需析构
     */
    MIAHX_WRAPPER_API
    void set_car_trajectory_data_provider(DATA_PROVIDER provider, void *user_state);

    /**
     * @brief 设置驾驶人意图数据的提供器对象
     *
     * @param provider 提供器函数指针
     * @param user_state 用户自定义数据
     * @return StreamHandler 类型对象的指针，无需析构
     */
    MIAHX_WRAPPER_API
    void set_usr_driver_intention_data_provider(DATA_PROVIDER provider, void *user_state);

    MiahxWrapperNodejs(const MiahxWrapperNodejs &instance) = delete;

    const MiahxWrapperNodejs &operator=(const MiahxWrapperNodejs &instance) = delete;

private:
    MiahxWrapperNodejs();

    ~MiahxWrapperNodejs();

private:
    void *mParticipant;
    void *mBngClassicalReader;
    void *mPointCloudReader;
    void *mUserReader;
};
